GitHubヘルプを参考にSSHキーの設定を行ってみた
こんにちは、CX事業本部の若槻です。
今回は、Gitコマンドの実行でGitHubとのSSH認証ができるように、GitHubヘルプの手順を参考にしてSSHキーの設定を行ってみました。
SSHキーの設定を行ってみた
[GitHub に SSH で接続する - GitHub ヘルプ]の以下の手順を参考にSSHキーの設定を行っていきます。
既存の SSH キーの確認
まず、「1. 既存の SSH キーの確認」を参考に、GitHubの既存のSSHキーがローカル側に存在するか確認を行います。
コマンドls -al ~/.ssh
を実行します。
$ ls -al ~/.ssh
ディレクトリの一覧から、公開SSHキーがすでに作成済みであるか確認します。 デフォルトでは、公開鍵のファイル名は以下のいずれかです。
id_rsa.pub
id_ecdsa.pub
id_ed25519.pub
公開鍵と秘密鍵のペアが存在しないか、既存の鍵をGitHubへの接続に利用したくない場合、新しいSSHキーを作成します。
一覧に既存の公開鍵と秘密鍵のペア (id_rsa.pub
とid_rsa
など) があり、それをGitHubへの接続に利用したい場合、SSHキーをssh-agentに追加します。
新しい SSH キーを生成する
「2. 新しい SSH キーを生成する」を参考に、ssh-keygen
コマンドを利用して新しいSSHキーを生成します。
コマンドssh-keygen -t rsa -b 4096 -C "<自分のGitHubメールアドレス>"
を実行します。公開鍵のコメントに指定のメールアドレスを含む新しいSSHキーが作成されます。
$ ssh-keygen -t rsa -b 4096 -C "<自分のGitHubメールアドレス>" > Generating public/private rsa key pair.
「Enter a file in which to save the key」というメッセージが表示されたら、プロンプトでEnterキーを押します。デフォルトで/home/you/.ssh/id_rsa
というパスでキーのファイルが作成されます。
> Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
プロンプトで安全なパスフレーズを入力します。
> Enter passphrase (empty for no passphrase): > Enter same passphrase again:
コマンドls -al ~/.ssh
を実行すると、~/.ssh
ディレクトリ配下に公開鍵id_rsa.pub
と秘密鍵id_rsa
のファイルが作成されていることが確認できます。
SSH キーを ssh-agent に追加する
「3. SSH キーを ssh-agent に追加する」を参考に、作成したSSHキーのssh-agentへの追加を行います。
バックグラウンドでssh-agentを開始します。
$ eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
を実行して、SSH秘密鍵をssh-agentに追加します。
$ ssh-add ~/.ssh/id_rsa
GitHubアカウントへの新しいSSHキーの追加
「4. GitHub アカウントへの新しい SSH キーの追加」を参考に、作成したSSHキーをGitHubアカウントに追加を行います。
まず、作成したSSH公開鍵id_rsa.pub
の中身をクリップボードにコピーします。xclip -sel clip < ~/.ssh/id_rsa.pub
コマンドなどで直接クリップボードにコピーするか、エディターなどで開いてコピーします。
[https://github.com/settings/keys]にアクセスして「SSH and GPG keys」ページを開きます。[New SSH key] (または [Add SSH key]) をクリックします。
[Title]フィールドで任意のキータイトルを入力し、[Key]フィールドで先ほどコピーした公開鍵の中身をペーストして、[Add SSH key]をクリックします。
GitHubのパスワードを要求された場合は確認します。
[SSH Keys]のキー一覧で追加したSSHキーが表示されれば追加は成功です。
SSH接続をテストする
「5. SSH 接続をテストする」を参考に、GitHubへのSSH接続のテストを行います。
コマンドssh -T [email protected]
を実行して、GitHub([email protected]
)へのSSH接続を行います。
$ ssh -T [email protected]
以下のプロンプトメッセージが表示されたらyes
を入力してEnterを押します。
> Are you sure you want to continue connecting (yes/no)?
以下のように表示されて自分のGitHubユーザー名(username
の箇所)が確認できたらテストは成功です。
> Hi username! You've successfully authenticated, but GitHub does not > provide shell access.
SSHキーの設定はこれで完了です。この状態で例えばプライベートリポジトリに対してgit clone
コマンドを実行すれば、以下のように問題なくクローンできるはずです。
$ git clone [email protected]:username/repository.git Cloning into 'repository'... Warning: Permanently added the RSA host key for IP address 'IP Address' to the list of known hosts. remote: Enumerating objects: 31, done. remote: Counting objects: 100% (31/31), done. remote: Compressing objects: 100% (16/16), done. remote: Total 31 (delta 5), reused 14 (delta 1), pack-reused 0 Receiving objects: 100% (31/31), 4.21 KiB | 4.21 MiB/s, done. Resolving deltas: 100% (5/5), done.
ssh-agentを使ったSSH接続について
今回はssh-agentにSSH秘密鍵を保持する設定を行いました。このssh-agentが起動しているあいだは、gitコマンド実行時にssh-agentがSSHキーの受け渡しを自動で行ってくれるようになります。
ssh-agentが起動しているかはssh-add -l
コマンドで確認できます。実行して以下のようにSSHキーの情報が表示されれば起動しています。
$ ssh-add -l 4096 SHA256:xiV540/OYAMYE7h4cbzCFINn6pAtRjM+a53Dh6dPP1k /home/ec2-user/.ssh/id_rsa (RSA)
一方で以下のように表示されたらssh-agentは起動していません。
$ ssh-add -l Could not open a connection to your authentication agent.
この状態でgitコマンドを実行しても認証は失敗します。
$ git clone [email protected]:username/repository.git Cloning into 'repository'... Enter passphrase for key '/home/ec2-user/.ssh/id_rsa': Received disconnect from IP Address port 22:11: Bye Bye Authentication failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
よって、作業開始時にssh-agentが毎回実行されるように、.bash_profile
や.bashrc
ファイルにeval "$(ssh-agent -s)"
コマンドを追記すると良いかと思います。
しかし、それでもGitコマンド実行時の認証ごとに「Enter passphrase for key '/home/ec2-user/.ssh/id_rsa': 」のようにプロンプトが出てパスフレーズ入力は求めれらるので、それも避けたいのであれば以下の記事のようにパスフレーズを設定せず~/.ssh/config
を設定する方法を利用することも考えられます。
HTTPSを使うことも検討しよう
そもそもGitHubとしては以下ページにあるようにSSH接続ではなくHTTPS接続による方法が推奨されています。プロジェクトなどで特段の制限や方針がなければHTTPSを使うことを検討しましょう。
HTTPS接続の設定は以下のGitHubヘルプのページが参考になります。